今天,我們來學位元運算子以及賦值運算子吧!
位元運算子作用於位元,並逐位執行。"&"、"|"、"^"真值表如下:
A |
B |
A&B |
A|B |
A^B |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 0 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
簡單介紹一"&"、"|"、"^"這三個運算子:
&
": 一定要都是 1,輸出才為 1。(似數位邏輯裡的 and 閘)|
": 任一為 1,輸出就為 1。(似數位邏輯裡的 or 閘)^
": 相同為 0,不同為 1。(似數位邏輯裡的 xor 閘)再舉個例子:
如果今天有個變數 A=60,變數 B=13,以二進位表示:A= 00111100 B= 00001101
接下來我們做位元運算:
而 C 所支援的位元運算還加上"~"、"<<"、">>":
~
" : 取反運算子,(~ A) 會得到 61,即 11000011,一個有符號二進位補數形式。<<
" : 二進位左移運算子,將一個數的各二進位全部左移若干位(左邊的二進位丟棄,右邊補 0) ex. A<<2,會等於 240,因為本來 A= 00111100,往左移位一次等於 01111000,再移一次等於 11110000,就會等於 240。>>
" : 二進制右移運算子。將一個數的各二進位全部右移若干位,正數左補 0,負數左補 1,右邊丟棄。ex. A>>2,會等於 15,因為本來 A= 00111100,往右移一位會等於 00011110 再往右移一位會等於 00001111,就會等於 15。以上參考
ITREAD01 - 位運算子
上面舉例的,寫成程式會長這樣:
#include<stdio.h>
int main(){
int A = 60, B = 13 ;
printf("A&B=%d\n", A&B);
printf("A|B=%d\n", A|B);
printf("A^B=%d\n", A^B);
printf("~A=%d\n", ~A);
printf("A<<2=%d\n", A<<2);
printf("A>>2=%d", A>>2);
return 0;
}
這是輸出結果:
會發現,程式輸出結果與剛剛舉例推算出的結果是一樣的~
明天,來介紹運算子部分的最後一個小單元 : 賦值運算子!!